package com.powernode.Controller;

import jakarta.annotation.Resource;
import lombok.val;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

/**
 * Al聊天   RestController就是返回json数据
 *
 */
@RestController
public class ChatController {

    /**
     * 自动注入的 ，查看接口的实现有那些就是  Ctrl +H
     */
    @Resource
    private OpenAiChatModel openAiChatModel;

    /**
     * 聊天的方法。底层调用的openAi的方法
     * RequestParam 接受参数
     * msg 就是我们提的问题
     * @return
     */
    @RequestMapping("/ai/chat")
    public String chat(@RequestParam("msg") String msg){
        String called = openAiChatModel.call(msg);
        return called;
    }


    /**
     * 聊天的方法。底层调用的openAi的方法
     * RequestParam 接受参数
     * msg 就是我们提的问题
     * ChatResponse 返回的是一个josn串
     * chatResponse.getResult().getOutput().getContent();只获取文本
     * @return
     */
    @RequestMapping("/ai/chat2")
    public Object chat2(@RequestParam("msg") String msg){
        ChatResponse chatResponse = openAiChatModel.call(new Prompt(msg));
        return chatResponse.getResult().getOutput().getContent();
    }

    /**
     *OpenAiChatOptions.builder() gpt的可选参数
     * @param msg
     * @return
     */
    @RequestMapping("/ai/chat3")
    public Object chat3(@RequestParam("msg") String msg){
        ChatResponse chatResponse = openAiChatModel.call(new Prompt(msg, OpenAiChatOptions.builder()
                //.withModel("gpt-4-32k")  //gpt的版本 ，32K是参数，参数越高，回答问题越准确
                .withTemperature(0.4F)  //温度值，温度越高，回答的准确率越低，温度越低，回答的准确率越高
                .build()));
        return chatResponse.getResult().getOutput().getContent();
    }

    /**
     *OpenAiChatOptions.builder() gpt的可选参数
     * @param msg
     * @return
     */
    @RequestMapping("/ai/chat4")
    public Object chat4(@RequestParam("msg") String msg){
        Flux<ChatResponse> flux = openAiChatModel.stream(new Prompt(msg, OpenAiChatOptions.builder()
                //.withModel("gpt-4-32k")  //gpt的版本 ，32K是参数，参数越高，回答问题越准确
                .withTemperature(0.4F)  //温度值，温度越高，回答的准确率越低，温度越低，回答的准确率越高
                .build()));
        return flux.collectList();
    }


}
